package com.jhy.review.linkedlist;

/**
 * 实现一个单链表的反转
 */
public class ReverseLinked {

    public static ListNode reverse(ListNode head){
        // 定义一个空的新的链表
        ListNode node = null;
        ListNode temp = null;
        while(head != null){
            // 表示当前插入后 原节点的后面的那个节点
            temp = head.next;
            // 头节点插入到新的的节点上面去
            head.next = node;
            // 这现在的node为头节点
            node = head;
            // temp就会旧的链表的头节点 继续循环下去
            head = temp;

        }
        return node;


    }
    public static void main(String[] args){
        ListNode head = new ListNode(1);
        ListNode node1 = new ListNode(8);
        ListNode node2 = new ListNode(9);
        ListNode node3 = new ListNode(4);
        ListNode node4 = new ListNode(5);
        head.next = node1;
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        ListNode node = reverse(head);
        while(node != null){
            System.out.println(node.val);
            node = node.next;
        }
    }
}

class ListNode{
    int val;	//数值 data
    ListNode next;	// 结点 node
    ListNode(int x) {    //可以定义一个有参构造方法，也可以定义一个无参构造方法
        val = x;
    }
}
